Java Technologies উদাহরণ সহ Null Value Handling গাইড ও নোট

250

MapStruct একটি শক্তিশালী Java মডেল ম্যাপিং টুল যা বিভিন্ন ধরনের অবজেক্টের মধ্যে ডেটা ম্যাপিং করে। তবে, যখন আপনি null ভ্যালু ম্যাপ করেন, তখন কিছু বিশেষ কনফিগারেশন প্রয়োজন হয়, যেমন null handling বা null-safe mappingMapStruct আপনাকে বিভিন্ন পদ্ধতিতে null ভ্যালু পরিচালনা করতে সহায়তা করে, যাতে null pointer exceptions বা অপ্রত্যাশিত ফলাফল এড়ানো যায়।

এই টিউটোরিয়ালে, আমরা MapStruct ব্যবহার করে null value handling কিভাবে করা যায় তা উদাহরণসহ আলোচনা করব।


১. Null Value Handling in MapStruct

MapStruct ডিফল্টভাবে null values অটোমেটিক্যালি পাশ করে দেয় এবং যদি আপনি কোনো null ভ্যালু পেয়েছেন, তবে কোনো ম্যাপিং করা হবে না। তবে কখনো কখনো আপনি চাইবেন যে, null values এর ক্ষেত্রে কিছু কাস্টম লজিক প্রয়োগ করতে।

MapStruct এ null ভ্যালু ব্যবহারের জন্য নিচের কিছু পদ্ধতি রয়েছে:

  1. Default Behavior: null ভ্যালু সরাসরি প্রসেস না করলেই, null টার্গেট ফিল্ডে চলে যায়।
  2. @Mapping annotation: আপনি @Mapping অ্যানোটেশন ব্যবহার করে null ভ্যালু হ্যান্ডেল করতে পারবেন।
  3. @Mapping with defaultValue: আপনি defaultValue নির্ধারণ করতে পারেন, যাতে null পাওয়ার ক্ষেত্রে একটি ডিফল্ট মান নির্ধারণ করা হয়।

২. Default Null Handling (ডিফল্ট Null হ্যান্ডলিং)

MapStruct সাধারণত, যদি আপনি কোনো null ভ্যালু ইনপুট হিসেবে পেয়ে থাকেন, তবে তা সরাসরি টার্গেট প্রপার্টিতে সেট করে দেয়। যেমন:

উদাহরণ:

public class Person {
    private String name;
    private Integer age;

    // Getters and Setters
}

public class PersonDTO {
    private String name;
    private Integer age;

    // Getters and Setters
}
@Mapper
public interface PersonMapper {
    PersonDTO personToPersonDTO(Person person);
}

এখানে, যদি Person অবজেক্টের name বা age ফিল্ডের কোনো মান null হয়, তবে PersonDTO তে সেই ফিল্ডেও null সেট হবে।


৩. @Mapping Annotation ব্যবহার করে Null Value Handling

MapStruct এ আপনি @Mapping অ্যানোটেশন ব্যবহার করে null ভ্যালু হ্যান্ডেল করতে পারেন। এর মাধ্যমে আপনি null ভ্যালু পাওয়ার ক্ষেত্রে একটি ডিফল্ট মান নির্ধারণ করতে পারেন।

উদাহরণ: Default Value for Null

@Mapper
public interface PersonMapper {

    @Mapping(source = "name", target = "name", defaultValue = "Unknown")
    @Mapping(source = "age", target = "age", defaultValue = "0")
    PersonDTO personToPersonDTO(Person person);
}

এখানে, যদি name বা age ফিল্ডে null ভ্যালু থাকে, তাহলে defaultValue এর মাধ্যমে ডিফল্ট মান নির্ধারণ করা হবে। এর মানে:

  • যদি name এর মান null হয়, তাহলে "Unknown" সেট হবে।
  • যদি age এর মান null হয়, তাহলে 0 সেট হবে।

৪. Null Check Method (Null চেক মেথড)

ম্যাপিংয়ের জন্য কাস্টম null check মেথড ব্যবহার করা যেতে পারে। MapStruct আপনাকে @BeforeMapping অ্যানোটেশন ব্যবহার করে কাস্টম ম্যাপিং ফাংশন তৈরি করার সুযোগ দেয়, যা null চেক করার জন্য ব্যবহার করা যেতে পারে।

উদাহরণ: Custom Null Check

@Mapper
public interface PersonMapper {

    @Mapping(source = "name", target = "name")
    @Mapping(source = "age", target = "age")
    PersonDTO personToPersonDTO(Person person);

    default String mapName(String name) {
        return name != null ? name : "Default Name";
    }

    default Integer mapAge(Integer age) {
        return age != null ? age : 18;
    }
}

এখানে, mapName() এবং mapAge() মেথডগুলো null চেক করছে এবং যদি null থাকে, তবে ডিফল্ট মান সরবরাহ করছে।


৫. @Mapping with QualifiedByName

MapStruct আপনাকে কাস্টম ম্যাপিং লজিক ব্যবহার করতে সাহায্য করে যখন আপনি নির্দিষ্ট null ভ্যালুর জন্য নির্দিষ্ট মান চান। এটি qualifiedByName বা qualifiedBy অ্যানোটেশন ব্যবহার করে করা যেতে পারে।

উদাহরণ: Custom Mapping with QualifiedByName

@Mapper
public interface PersonMapper {

    @Mapping(source = "name", target = "name", qualifiedByName = "mapName")
    PersonDTO personToPersonDTO(Person person);

    @Named("mapName")
    default String mapName(String name) {
        return name != null ? name : "Custom Default Name";
    }
}

এখানে, @Named অ্যানোটেশন ব্যবহার করে কাস্টম ম্যাপিং মেথড mapName() তৈরি করা হয়েছে, যা null নামের জন্য একটি কাস্টম ডিফল্ট মান প্রদান করবে।


৬. Null Handling for Nested Objects (নেস্টেড অবজেক্টে Null Handling)

MapStruct এর মাধ্যমে আপনি nested objects এর মধ্যে null handling করতে পারেন। যদি কোনো নেস্টেড অবজেক্ট null হয়, তাহলে MapStruct ডিফল্টভাবে null মান সেট করবে।

উদাহরণ: Null Handling in Nested Objects

public class Address {
    private String street;
    private String city;

    // Getters and Setters
}

public class Person {
    private String name;
    private Address address;

    // Getters and Setters
}

public class PersonDTO {
    private String name;
    private String street;
    private String city;

    // Getters and Setters
}
@Mapper
public interface PersonMapper {

    @Mapping(source = "address.street", target = "street")
    @Mapping(source = "address.city", target = "city")
    PersonDTO personToPersonDTO(Person person);
}

এখানে, যদি Address অবজেক্ট null হয়, তাহলে street এবং city ফিল্ডে null মান চলে যাবে।


৭. Null Value Handling with Collection Mapping

যখন আপনার Collection বা Array ম্যাপিং থাকে, তখনও null ভ্যালু হ্যান্ডলিং করতে পারেন। MapStruct null ভ্যালু গুলি উপেক্ষা করে এবং যখন কোনো এলিমেন্ট null হয়, তখন সেই এলিমেন্টটিকে null হিসেবে রাখে।

উদাহরণ: Null Handling in Collections

public class Person {
    private String name;
    private List<Address> addresses;

    // Getters and Setters
}

public class Address {
    private String city;
    private String street;

    // Getters and Setters
}

public class PersonDTO {
    private String name;
    private List<String> cities;

    // Getters and Setters
}
@Mapper
public interface PersonMapper {

    @Mapping(source = "addresses", target = "cities")
    PersonDTO personToPersonDTO(Person person);
}

এখানে, addresses List থেকে cities List এ ম্যাপিং করা হচ্ছে এবং যদি কোনো Address অবজেক্ট null হয়, তবে cities List এ সেট করা হবে null


৮. Null Value Handling with Optional

MapStruct Optional ব্যবহারেও null হ্যান্ডলিং সমর্থন করে। Optional ব্যবহার করে আপনি আরো নিরাপদভাবে null চেক করতে পারেন।

উদাহরণ: Null Handling with Optional

public class Person {
    private Optional<String> name;

    // Getters and Setters
}

public class PersonDTO {
    private String name;

    // Getters and Setters
}
@Mapper
public interface PersonMapper {

    @Mapping(source = "name", target = "name")
    PersonDTO personToPersonDTO(Person person);

    default String mapOptionalName(Optional<String> name) {
        return name.orElse("Default Name");
    }
}

এখানে, Optional থেকে String ম্যাপ করতে orElse() মেথড ব্যবহার করা হয়েছে।


সারাংশ

MapStruct ব্যবহার করে null value handling করা খুবই সহজ এবং শক্তিশালী। এটি বিভিন্ন কৌশল ব্যবহার করে null চেক এবং ডিফল্ট মান নির্ধারণ করতে সহায়তা করে। আপনি @Mapping অ্যানোটেশন ব্যবহার করে null ভ্যালু হ্যান্ডলিং কাস্টমাইজ করতে পারেন, কাস্টম ম্যাপিং মেথড তৈরি করতে পারেন, এবং কাস্টম ডিফল্ট মান নির্ধারণ করতে পারেন। এছাড়া, nested objects, collections, এবং Optional এর ক্ষেত্রেও null value handling সম্পাদন করা সম্ভব।


Content added By
Promotion

Are you sure to start over?

Loading...